package vo

import (
	"time"
)

// PreAuthCode 预授权码
type PreAuthCode struct {
	Code      string
	ExpiresIn int64
}

// Text 文本消息
type Text struct {
	// 内容
	Content string
}

// Image 图片消息
type Image struct {
	// 媒体文件ID
	MediaID string
}

// Voice 语音消息
type Voice struct {
	// 媒体文件ID
	MediaID string
}

// Video 视频消息
type Video struct {
	// 媒体文件ID
	MediaID string
	// 封面文件媒体ID
	ThumbMediaID string
	// 标题
	Title string
	// 描述
	Description string
}

// Music 音乐消息
type Music struct {
	// 音乐标题
	Title string
	// 音乐描述
	Description string
	// 音乐URL
	MusicURL string
	// hq 音乐URL
	HQMusicURL string
	// 封面文件媒体ID
	ThumbMediaID string
}

// News 图文消息
type News struct {
	// 标题
	Title string
	// 描述
	Description string
	// URL
	URL string
	// 照片URL
	PicURL string
}

// MPNews 图文消息
type MPNews struct {
	// 媒体文件ID
	MediaID string
}

// MenuContent 菜单内容
type MenuContent struct {
	// ID
	ID string
	// 内容
	Content string
}

// MsgMenu 菜单消息
type MsgMenu struct {
	// 头部内容
	HeadContent string
	// 菜单内容列表
	Menus []*MenuContent
	// 尾部内容
	TailContent string
}

// WXCard 卡券消息
type WXCard struct {
	// 卡券ID
	CardID string
}

// MiniProgramPage 小程序消息
type MiniProgramPage struct {
	// 标题
	Title string
	// 小程序app_id
	AppID string
	// 页面路径
	PagePath string
	// 媒体文件ID
	ThumbMediaID string
}

// SendCustomMessageRequest 发送客服消息
type SendCustomMessageRequest struct {
	// 用户open_id
	ToUser string
	// 消息类型: text
	MsgType string
	// 文本消息
	Text *Text
	// 图片消息
	Image *Image
	// 语音消息
	Voice *Voice
	// 视频消息
	Video *Video
	// 音乐消息
	Music *Music
	// 图文(外链)消息
	News *News
	// 图文消息
	MPNews *MPNews
	// 菜单消息
	MsgMenu *MsgMenu
	// 卡券
	WXCard *WXCard
	// 小程序卡片（要求小程序与公众号已关联）
	MiniProgramPage *MiniProgramPage
}

// CreateQRCodeTicketRequest 创建带参数二维码请求
type CreateQRCodeTicketRequest struct {
	// 微信公众号app_id
	AppID string
	// 二维码类型：
	//	   QR_SCENE为临时的整型参数值
	//	   QR_STR_SCENE为临时的字符串参数值
	//	   QR_LIMIT_SCENE为永久的整型参数值
	//	   QR_LIMIT_STR_SCENE为永久的字符串参数值
	ActionName string
	// 场景值ID 临时二维码时为32位非0整型，永久二维码时最大值为100000（目前参数只支持1--100000）
	SceneID int32
	// 场景值ID（字符串形式的ID），字符串类型，长度限制为1到64
	SceneStr string
	// 二维码有效时间，以秒为单位。 最大不超过2592000（即30天），此字段如果不填，则默认有效期为30秒。
	ExpireSeconds int64
}

// QRCodeTicket 创建带参数二维码ticket
type QRCodeTicket struct {
	Ticket string
	// 该二维码有效时间，以秒为单位。 最大不超过2592000（即30天）。
	ExpireSeconds int64
	// 二维码图片解析后的地址，开发者可根据该地址自行生成需要的二维码图片
	URL string
}

// WechatUserInfo 微信用户信息
type WechatUserInfo struct {
	Subscribe int32
	OpenID    string
	UnionID   string
	Nickname  string
	Avatar    string
	Sex       int32
	City      string
	Country   string
	Province  string
	Language  string
	QRScene   int32
	Ticket    string
}

// AuthInfo 授权信息
type AuthInfo struct {
	OpenAppID    string
	AppID        string
	Token        string
	RefreshToken string
	ExpiredAt    time.Time
}

// WXALoginInfo 登录信息
type WXALoginInfo struct {
	OpenID     string
	UnionID    string
	SessionKey string
}

type WechatTemplate struct {
	TemplateID  string `json:"template_id"`
	UserVersion string `json:"user_version"`
	UserDesc    string `json:"user_desc"`
	ExtJSON     string `json:"ext_json"`
}

type BytedanceTemplate struct {
	TemplateID  int    `json:"template_id"`
	UserVersion string `json:"user_version"`
	UserDesc    string `json:"user_desc"`
	ExtJSON     string `json:"ext_json"`
}

type AlipayTemplate struct {
	TemplateVersion string `json:"template_version"`
	VersionDesc     string `json:"version_desc"`
	TemplateID      string `json:"template_id"`
	AppVersion      string `json:"app_version"`
	BundleID        string `json:"bundle_id"`
	Ext             string `json:"ext"`
}
